import { toStringTypeCheck } from './toStringTypeCheck';

/**
 * empty 复制对象 克隆对象
 * -
 * @param {any} o 复制对象 简单复制对象 的 属性 不包括其特质 类含义
 * @returns {any} 返回 全新的 简单复制对象
 */
function emptyClone(o) {
  let curo;
  if (toStringTypeCheck(o, 'function')) {
    curo = o;
  } else if (toStringTypeCheck(o, 'string')) {
    curo = o;
  } else if (toStringTypeCheck(o, 'number')) {
    curo = o;
  } else if (toStringTypeCheck(o, 'boolean')) {
    curo = o;
  } else if (toStringTypeCheck(o, 'array')) {
    curo = [];
    for (let i = 0; i < o.length; i++) {
      curo.push(emptyClone(o[i]));
    }
  } else if (o instanceof Object) {
    curo = {};
    for (const key in o) {
      if (Object.hasOwnProperty.call(o, key)) {
        curo[key] = emptyClone(o[key]);
      }
    }
  } else {
    curo = o;
  }
  return curo;
}

export { emptyClone };
